package org.goko.common.preferences.fieldeditor.objectcollection; import java.util.ArrayList; import java.util.Iterator; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.window.IShellProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class CollectionObjectSelectionDialog extends Dialog implements ISelectionChangedListener { private Text textDescription; private java.util.List<CollectionObject> availableObjects; private java.util.List<CollectionObject> selectedObjects; private ListViewer valueListViewer; /** * @wbp.parser.constructor */ public CollectionObjectSelectionDialog(Shell parentShell) { super(parentShell); availableObjects = new ArrayList<CollectionObject>(); } public CollectionObjectSelectionDialog(IShellProvider parentShell) { super(parentShell); availableObjects = new ArrayList<CollectionObject>(); } /** (inheritDoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); valueListViewer = new ListViewer(composite, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI); List list = valueListViewer.getList(); valueListViewer.setContentProvider(new ArrayContentProvider()); valueListViewer.setLabelProvider(new CollectionObjectLabelProvider()); valueListViewer.addSelectionChangedListener(this); valueListViewer.setInput(availableObjects); GridData gd_list = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); gd_list.minimumHeight = 250; gd_list.minimumWidth = 250; list.setLayoutData(gd_list); ScrolledComposite scrolledComposite = new ScrolledComposite(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); GridData gd_scrolledComposite = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); gd_scrolledComposite.heightHint = 40; scrolledComposite.setLayoutData(gd_scrolledComposite); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); textDescription = new Text(scrolledComposite, SWT.READ_ONLY); scrolledComposite.setContent(textDescription); scrolledComposite.setMinSize(textDescription.computeSize(SWT.DEFAULT, SWT.DEFAULT)); return composite; } /** * @return the availableObjects */ public java.util.List<CollectionObject> getAvailableObjects() { return availableObjects; } /** * @param availableObjects the availableObjects to set */ public void setAvailableObjects(java.util.List<CollectionObject> availableObjects) { this.availableObjects = availableObjects; if(valueListViewer != null){ valueListViewer.setInput(availableObjects); } } protected Point getInitialSize() { return new Point(281, 424); } /** (inheritDoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected void okPressed() { IStructuredSelection selection = (IStructuredSelection) this.valueListViewer.getSelection(); selectedObjects = new ArrayList<CollectionObject>(); if(!selection.isEmpty()){ Iterator iterator = selection.iterator(); while (iterator.hasNext()) { selectedObjects.add((CollectionObject) iterator.next()); } } super.okPressed(); } /** * @param event */ @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); if(ObjectUtils.equals(selection.size(), 1)){ CollectionObject object = (CollectionObject) selection.getFirstElement(); textDescription.setText(object.getDescription()); }else{ textDescription.setText(StringUtils.EMPTY); } } /** * @return the selectedObjects */ public java.util.List<CollectionObject> getSelectedObjects() { return selectedObjects; } /** * @param selectedObjects the selectedObjects to set */ public void setSelectedObjects(java.util.List<CollectionObject> selectedObjects) { this.selectedObjects = selectedObjects; } }